#ifndef OPENSSL_H
#define OPENSSL_H

#pragma once
#include <string>

namespace openssl {

    enum class Algorithm {
        MD5,
        SHA1,
        SHA224,
        SHA256,
        SHA384,
        SHA512,
    };

    // 生成随机盐值
    std::string generateSalt();

    // 计算哈希值
    std::string Hash(std::string input, Algorithm algorithm);

    // 计算 SHA256 哈希值
    std::string Hash256(std::string input);

    // 计算带盐哈希值
    std::string HashSalted(const std::string& str, const std::string& salt);

    // 计算 MD5 哈希值
    std::string MD5(std::string input);

    // 计算 SHA-1 哈希值
    std::string Hash1(std::string input);

    // 计算文件 hash 值
    std::string GetFileHash(std::string fileName, Algorithm algorithm);

    // 计算文件 hash 值
    std::string Hash(std::ifstream file, Algorithm algorithm);

};  // namespace openssl

#endif